import { getUserInfo, login } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'

const state = {
  token: getToken(), // 从缓存中读取初始值
  userInfo: {}// 用户信息
}
const mutations = {
  setUserInfo(state, userInfo) {
    // 将用户信息存储到state中
    state.userInfo = userInfo
  },
  // 删除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  },
  setToken(state, token) {
    state.token = token
    // 同步到缓存
    setToken(token)
    // 这里的setToken并非嵌套，而是取自'@/utils/auth'的
    // 其作用主要是通过Cookies.set方式持久化存储数据到本地
  },
  // 删除过期token
  removeToken(state) {
    // 删除Vuex的token
    state.token = null
    removeToken()
  }
}

const actions = {
  // 登出
  logout(context) { // 调用此页mutations的removeToken方法，擦除数据，也为了提交规范化
    // 删除token
    context.commit('removeToken')
    // 删除用户信息
    context.commit('removeUserInfo')
  },
  // context上下文，传入参数
  async login(context, data) {
    console.log(data)
    // 调用登录接口
    const token = await login(data)// 这里的login是来自'@/api/user'的，其作用是调用后端的登录接口
    console.log('ssssssssss' + token)
    // 返回一个token 123456
    context.commit('setToken', token)
  },

  async getUserInfo(context) {
    // 调用获取用户信息的接口
    const result = await getUserInfo()// 这里的getUserInfo是来自'@/api/user'的，其作用是调用后端的获取用户信息的接口
    context.commit('setUserInfo', result)// 将用户信息存储到state中
  }
}
export default {
  namespaced: true, // 开启命名空间
  state, // 数据本身
  mutations, // 同步方法
  actions// 异步方法
}
